/**
 *
 * @param tasks 声明当前状态（tasks）作为第一个参数；
 * @param action 声明 action 对象作为第二个参数；
 * @returns 从 reducer 返回 下一个 状态（React 会将旧的状态设置为这个最新的状态）。
 */
export default function tasksReducer(tasks, action) {
  switch (action.type) {
    case "added": {
      return [
        ...tasks,
        {
          id: action.id,
          text: action.text,
          done: false,
        },
      ];
    }
    case "changed": {
      return tasks.map((t) => {
        if (t.id === action.task.id) {
          return action.task;
        } else {
          return t;
        }
      });
    }
    case "deleted": {
      return tasks.filter((t) => t.id !== action.id);
    }
    default: {
      throw Error("未知 action：" + action.type);
    }
  }
}
